import util from "../../util";
export default class eventModel {
    constructor() {
        this.util=util;
        this.filter=null;
        this.record={};
        this.pointer=null;
    }
    setRecord(record){
        if(!!record.category&&!!record.name){
            this.record=record;
            this._setFilter();
            if(!this.record.event||Object.keys(this.record.event).length==0){
                this.record.event=eventModel.eventTpl();
            }
        }else{
            this.record={};
            this._setFilter(false);
        }

    }
    static create(record){
        let object=new eventModel();
        if(!!record){
            object.setRecord(record);
        };
        return object;
    }
    _getFilter(array){
        let filter='';
        if(util.tools.testType(array)=='array'){
            filter= `category='${array[0]}'&&name='${array[1]}'`
        }else if(util.tools.testType(array)=='object'){
            filter= `category='${array.category}'&&name='${array.name}'`
        }else if(util.tools.testType(array)=='string'&&array.split(',').length==2){
            let arr=array.split(',');
            filter= `category='${arr.category}'&&name='${arr.name}'`
        }else{
            filter= array;
        }
        filter=`${filter}`
        return filter;
    }
    _setFilter(empty=true){
        if(!empty){
            this.filter=null;
            this.pointer=null;
            return;
        }
        this.filter=[this.record.category,this.record.name];
        this.pointer={
            category:this.record.category,
            name:this.record.name,
            id:this.record.id,
            version:this.record.version,
            published:this.record.published,
        };
    }
    /*******************************************************************************
     * 对象属性编辑功能
     * ******************************************************************************/
    /***
     * 新增
     * @param record
     * @returns {Promise<boolean|*>}
     */
    async add(record){
        if(!record||!record.category||!record.name||record.category==''||record.name==''){
            return false;
        }
        let newRecord=Object.assign(eventModel.tpl(),record);
        let result = await util.api.Event.add(newRecord).then(data=>{
            if(!!data){
                this.setRecord(data);
                return true;
            }else{
                return false;
            }
        }).catch(err=>{
            return false;
        });
        return result;
    }
    /**
     * 删除
     * @returns {Promise<boolean|*>}
     */
    async delete(){
        if(!!this.filter){
            let result = await util.api.Event.delete(this.pointer.id).then(flag=>{
                if(flag){
                    this.setRecord([]);
                    return true;
                }else{
                    return false;
                }
            }).catch(err=>{
                return false;
            });
            return result;
        }else{
            return false;
        }


    }
    /**
     * 更新
     * @returns {Promise<*>}
     */
    async update(){
        let result = await util.api.Event.update(this.record).then(flag=>{
            if(flag){
                return true;
            }else{
                return false;
            }
        }).catch(err=>{
            return false;
        });
        return result;
    }
    /**
     * 查询
     * @param param
     * @returns {Promise<*>}
     */
    async query(category,name){
        let filter=`category='${category}'&&name='${name}'`;
        let result = await util.api.Event.queryIncludeUnpublished({condition:filter}).then(data=>{
            if(!!data){
                this.setRecord(data[0]);
                return true;
            }else{
                return false;
            }
        }).catch(err=>{
            return false;
        });
        return result;
    }
    addServiceItem(index){
        this.record.event.service.splice(index+1,0,eventModel.serviceItemTpl())
    }
    removeServiceItem(index){
        this.record.event.service.splice(index,1);
    }
    /**
     * 新增模板
     * @returns {{comments: string, web: {}, values: {}, name: string, className: string, published: boolean, type: string, version: number, hier: *[], others: {}}}
     */
    static tpl(){
        return {
            category: "",
            name: "",
            version: 1,
            published: true,
            event:eventModel.eventTpl(),
            // createTime: dayjs.localeData(),
            // updateTime: (new Date()).toLocaleDateString(),
            comments: ""
        }
    }
    static eventTpl(){
        return {
            state:{},
            param:{},
            service:[],
            back:{
                type:'',
                data:'',
                flag:false,
            }
        }
    }
    static serviceItemTpl(){
        return {
            model:'',
            action:'',
            // param:{},
            // where:{
            //     type:'',
            //     className:'',
            //     id:'',
            //     condition:''
            // },
            saveTo:''
        }
    }
    static serviceModelTpl(){
        return [
            {
                label:'实体模型',
                value:'entity',
                children:[
                    {
                        label:'创建',
                        value:'add',
                        config:{
                            refModel:{
                                // type:'',
                                // className:'',
                            },
                            param:{
                                name:''
                            },
                            saveTo:''
                        }
                    },
                    {
                        label:'指定删除',
                        value:'deleteByName',
                        config:{
                            refModel:{
                                // type:'',
                                // className:'',
                            },
                            param:{
                                name:''
                            },
                        }
                    },
                    {
                        label:'引入删除',
                        value:'deleteById',
                        config:{
                            refModel:{
                                // type:'',
                                // className:'',
                            },
                            param:{
                                id:''
                            },
                        }
                    },
                    {
                        label:'条件删除',
                        value:'delete',
                        config:{
                            refModel:{
                                // type:'',
                                // className:'',
                            },
                            condition:''
                        }
                    },
                    {
                        label:'指定查询',
                        value:'queryByName',
                        config:{
                            refModel:{
                                // type:'',
                                // className:'',
                            },
                            param:{
                                name:''
                            },
                            saveTo:''
                        }
                    },
                    {
                        label:'引入查询',
                        value:'queryById',
                        config:{
                            refModel:{
                                type:'',
                                className:'',
                            },
                            param:{
                                id:''
                            },
                            saveTo:''
                        }
                    },
                    {
                        label:'条件查询',
                        value:'query',
                        config:{
                            refModel:{
                                type:'',
                                className:'',
                            },
                            condition:'',
                            saveTo:''
                        }
                    },
                    {
                        label:'订阅',
                        value:'subscribe',
                        config:{
                            refModel:{
                                type:'',
                                className:'',
                            },
                            param:{
                                id:'',
                                name:'',
                                subscribeModel:'',
                                pointer:{}
                            },
                        }
                    },
                    {
                        label:'取消订阅',
                        value:'unsubscribe',
                        config:{
                            refModel:{
                                type:'',
                                className:'',
                            },
                            param:{
                                id:'',
                                name:'',
                            },
                        }
                    }
                ]
            },
            {
                label:'逻辑模型',
                value:'logic',
                children:[
                    {
                        label:'创建',
                        value:'add',
                        config:{
                            refModel:{
                                // type:'',
                                // className:'',
                            },
                            param:{
                                name:''
                            },
                            saveTo:''
                        }
                    },
                    {
                        label:'删除',
                        value:'delete',
                        config:{
                            refModel:{
                                // type:'',
                                // className:'',
                            },
                        }
                    },
                    {
                        label:'查询',
                        value:'query',
                        config:{
                            refModel:{
                                type:'',
                                className:'',
                            },
                            saveTo:''
                        }
                    },
                    {
                        label:'订阅',
                        value:'subscribe',
                        config:{
                            refModel:{
                                type:'',
                                className:'',
                            },
                            param:{
                                name:'',
                                subscribeModel:'',
                                pointer:{}
                            },
                        }
                    },
                    {
                        label:'取消订阅',
                        value:'unsubscribe',
                        config:{
                            refModel:{
                                type:'',
                                className:'',
                            },
                            param:{
                                name:'',
                            },
                        }
                    },
                    {
                        label:'注册',
                        value:'register',
                        config:{
                            refModel:{
                                type:'',
                                className:'',
                            },
                            param:{
                                name:'',
                                registerModel:'',
                                pointer:{}
                            },
                        }
                    },
                    {
                        label:'注销',
                        value:'unregister',
                        config:{
                            refModel:{
                                type:'',
                                className:'',
                            },
                            param:{
                                name:'',
                            },
                        }
                    }
                ]
            },
            {
                label:'孪生模型',
                value:'twins',
                children:[
                    {
                        label:'创建',
                        value:'add',
                        config:{
                            refModel:{
                                // type:'',
                                // className:'',
                            },
                            param:{
                                name:''
                            },
                            saveTo:''
                        }
                    },
                    {
                        label:'删除',
                        value:'delete',
                        config:{
                            refModel:{
                                // type:'',
                                // className:'',
                            },
                        }
                    },
                    {
                        label:'查询',
                        value:'query',
                        config:{
                            refModel:{
                                type:'',
                                className:'',
                            },
                            saveTo:''
                        }
                    },
                    {
                        label:'订阅',
                        value:'subscribe',
                        config:{
                            refModel:{
                                type:'',
                                className:'',
                            },
                            param:{
                                name:'',
                                subscribeModel:'',
                                pointer:{}
                            },
                        }
                    },
                    {
                        label:'取消订阅',
                        value:'unsubscribe',
                        config:{
                            refModel:{
                                type:'',
                                className:'',
                            },
                            param:{
                                name:'',
                            },
                        }
                    },
                    {
                        label:'注册',
                        value:'register',
                        config:{
                            refModel:{
                                type:'',
                                className:'',
                            },
                            param:{
                                name:'',
                                registerModel:'',
                                pointer:{}
                            },
                        }
                    },
                    {
                        label:'注销',
                        value:'unregister',
                        config:{
                            refModel:{
                                type:'',
                                className:'',
                            },
                            param:{
                                name:'',
                            },
                        }
                    }
                ]
            }
        ]
    }
}